mod controller;
mod settings;
mod models;
mod config;
mod middleware;
mod test;

use actix_web::{App, HttpServer, web};
use fast_log::Config;
use log::LevelFilter;
use rbatis::RBatis;
use rbdc_mysql::MysqlDriver;
use settings::Settings;

#[actix_web::main]
async fn main() -> std::io::Result<()> {

    // 初始化日志，配置为输出到控制台
    fast_log::init(Config::new()
        .file("my_app.log")
        .level(LevelFilter::Info)
        .console()
    ).unwrap();
    // 加载配置文件
    let settings = Settings::new().unwrap();
    let rb = RBatis::new();
    rb.link(MysqlDriver {}, &settings.database.mysql_rust_usl).await.unwrap();

    HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(rb.clone()))
            .configure(controller::init_student_controller)
            .configure(controller::init_login_controller)
    })
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}